<?php
/*
 * 后台用户控制器
 */
class UserController extends BasicController {
    
    private function init(){
        Yaf_Registry::get('tokenPlugin')->checkAuth(true);
    }

    /*
     * csv批量注册教师账号
     */
    public function teachercsvAction(){
        @set_time_limit(0);
        @ini_set('memory_limit','2048M');
        
        $params = $this->getPost('', false);
        //接收参数
        $filepath = isset($params['filepath']) && !empty($params['filepath']) ? $params['filepath'] : '';//上传的csv路径
        if(!$filepath){//如果没有传递过来对应的参数路径
            $return['code'] = '1';
            $return['msg'] = '参数错误！';
            
            echo json_encode($return);
            return false;
        }
        
        //读取csv内容
        $handle = fopen($filepath, 'r'); 

        $result = array();
        $n = 0;
        while($data = fgetcsv($handle, 10000)){
            $num = count($data);
            for ($i = 0;$i < $num;$i++) {
                $result[$n][$i] = iconv('gb2312', 'utf-8', $data[$i]);
            }
            $n++;
        }

        fclose($handle); //关闭指针
        
        $len_result = count($result);
        if($len_result <= 1){
            $return['code'] = '2';//没有数据
            $return['msg'] = '内容为空！';
            
            echo json_encode($return);
            return false;
        }
        
        unset($result[0]);
        
        $failArr = [];
        $okArr = [];
        
        $UserModel = Helper::load('User');
        $UserDetailModel = Helper::load('User_detail');
        $UserRoleRelationModel = Helper::load('User_role_relation');
        $ClassMemberModel = Helper::load('Class_member');
        
        Helper::import('User');
        //遍历结果集
        foreach ($result as $item) {
            //1.先验证一下角色名称是否被占用，如果被占用则不能继续
            $isOk = false;
            $userId = 0;
            if($okArr[$item[0]]){//如果当前的用户名存在于okArr的话说明这个用户名是刚刚注册的，并不需要数据库校验
                $isOk = true;
                $userId = $okArr[$item[0]];
                
                $isHas = true;
            }
            
            if(!$isOk){//确认并非本次新增则开始查询数据库数据比对
                $isHas = isAllreadyHasSameUserName($item[0]);
            }
            
            if(!$isHas || ($isHas && $isOk)){//不存在
                //初始化重置
                $cdata = [];
                $user_detail = [];
                $user_role = [];
                $class_member = [];
                
                //此处判断一下当前是否存在user_id
                if($userId){
                    $insert_id = $userId;
                }
                else{
                    $cdata['user_name'] = $item[0];
                    $cdata['user_password'] = encode_password($item[0].'123456');
                    $cdata['create_dateline'] = CUR_TIMESTAMP;
                    $cdata['modify_dateline'] = CUR_TIMESTAMP;
                    
                    $insert_id = $UserModel->Insert($cdata);
                }
                
                //判断一下当前的user_id是新生成还是旧的，如果是新生成的话需要加入用户详情表中去
                if($insert_id && !$userId){
                    $user_detail['user_realname'] = $item[1];
                    $user_detail['user_nickname'] = $item[1];
                    $user_detail['user_phone'] = $item[2];
                    $user_detail['am_id_1'] = $item[4];
                    $user_detail['am_id_2'] = $item[5];
                    $user_detail['am_id_3'] = $item[6];
                    $user_detail['sm_id'] = $item[7];
                    $user_detail['so_id'] = $item[8];
                    $user_detail['user_id'] = $insert_id;
                    $user_detail['create_dateline'] = CUR_TIMESTAMP;
                    $user_detail['modify_dateline'] = CUR_TIMESTAMP;
                    
                    $UserDetailModel->Insert($user_detail);
                }
                
                //判断一下当前用户关系表中是否存在该种角色的信息，如果有就放弃，如果没有就新增
                $isRelationHas = isAllreadyHasSameUserRelation($insert_id, abs($item[3]));
                
                if(!$isRelationHas){//不存在该关系类型则新增
                    //此处将当前用户绑定角色
                    $user_role['user_id'] = $insert_id;
                    $user_role['role_id'] = abs($item[3]);
                    $UserRoleRelationModel->Insert($user_role);
                }
                
                //此时插入班级成员表数据
                //判断一下当前用户关系表中是否存在该种角色的信息，如果有就放弃，如果没有就新增
                $isMemberHas = isAllreadyHasSameClassMember($item[9], $insert_id, $item[3], $item[10]);
                
                if(!$isMemberHas){
                    $class_member['class_id'] = $item[9];
                    $class_member['user_id'] = $insert_id;
                    $class_member['cm_type'] = $item[3];
                    $class_member['subject_d_ids'] = $item[3] == 22 ? $item[10] : '';//只有任课教师角色此字段才有内容
                    $class_member['create_time'] = CUR_TIMESTAMP;
                    $class_member['modify_time'] = CUR_TIMESTAMP;

                    $ClassMemberModel->Insert($class_member);
                }
                
                //在okArr中加入成功的用户名信息
                $okArr[$item[0]] = $insert_id;
            }
            else{
                $failArr[] = $item;
            }
        }
        
        if(!$failArr){//全部处理成功
            $return['code'] = '0';
        }
        else{
            $return['code'] = '3';
            
            // 2017-01-06 16:24:19
            $f = ',';//定义分隔符
        
            //开始组装目标数组
            $filename = 'erroruser'.date('YmdHis').'.csv'; //设置文件名
            $list[] = iconv("utf-8","gb2312", '用户名'.$f.'姓名'.$f.'手机号码'.$f.'角色编号'.$f.'省份编号'.$f.'市区编号'.$f.'县区编号'.$f.'学校编号'.$f.'网校编号'.$f.'班级编号'.$f.'授课科目编号(多科目通过|分割)');

            //将上述结果集转换为目标数组
            if(!empty($failArr) && is_array($failArr)){
                foreach ($failArr as $item) {
                    $list[] = iconv("utf-8","gb2312", $item[0].$f.$item[1].$f.$item[2].$f.$item[3].$f.$item[4].$f.$item[5].$f.$item[6].$f.$item[7].$f.$item[8].$f.$item[9].$f.$item[10]);
                }
            }
        
            $target = SITE_ROOT.'data/upload/';
            $fp = fopen($target.$filename, 'w');
            //向目标文件写入操作
            foreach ($list as $line) {
                fputcsv($fp, explode(',', $line));
            }

            fclose($fp);
        
            //检测是否对应已生成csv文件
            if(is_file($target.$filename)){
                //此处将该csv文件上传到文件服务器，同时删除本地的文件
                $data = ['filedata'  =>  new CURLFile($target.$filename), 'dir' => '/'];
                $ch = curl_init();

                curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
                curl_setopt($ch, CURLOPT_URL, 'http://101.37.15.34/upload.php');
                curl_setopt($ch, CURLOPT_POST, true );
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
                curl_setopt($ch, CURLOPT_HEADER, false);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

                $res = curl_exec($ch);
                curl_close($ch);

                if($res == 'success'){//成功
                    //此处删除掉本地的文件
                    @unlink($target.$filename);
                    
                    $return['data']['url'] = 'http://fstore.jxzhjy.com/data/upload/'.$filename;
                }
                else{//远程文件上传失败
                   $return['data']['url'] = 'http://webapi.jxzhjy.com/data/upload/'.$filename;
                }
            }
        }
        
        echo json_encode($return);
        return false;
    }
    
    
}